home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 27.zip / BS1 part 27 / Superbase4_d2.adf / mail / MAILIT.SBP < prev    next >
Text File  |  1992-08-05  |  24KB  |  1,042 lines

  1. SBP
  2.  ÿ½ ** Written by: Mark C. Johnson
  3.  
  4.  ÿ½ ** Config routine.  This reads in our old variables, sets up our error detection, and presets
  5.  ÿ½    variables used on the form.
  6.  
  7.  ÿ³ÿ_ÿwErrtrap
  8.  ÿ×prs%(5,5),a$(3),e$(3),c$(3),c%(3)
  9.  ÿâÿe
  10.  ÿÊÿË"Setting up..."
  11.  ÿÊ"MDEFAULT"
  12.  pth$ÿÿŽ
  13.  activity$ÿ""
  14.  
  15.  ÿ¬1,1,1,"&Add to Mailing List"
  16.  ÿ¬1,2,1,"&Merge Lists        "
  17.  ÿ¬1,3,1,"&Edit Mailing List  "
  18.  ÿ¬1,4,1,"Print &Labels       "
  19.  ÿ¬1,5,1,"&Utilities          "
  20.  ÿ¬1,6,1,"&Purge Duplicates   "
  21.  ÿ¬1,7,1,"Set &Options        "
  22.  ÿ¬1,8,1,"&Help               "
  23.  ÿ¬1,9,1,"&Quit               "
  24.  
  25. MainMenu: 
  26.  
  27.  ÿ½ ** Main Menu - This is the routine we use to set up our system wide
  28.  ÿ½    commands menu.  It checks for keyboard presses, mouse clicks, and
  29.  ÿ½    the selection of the menu bar.  It also sets up the form and other
  30.  ÿ½    Nicities.
  31.  
  32.  ÿÊÿåÿ¥ÿe
  33.  ÿÊÿË"Click, Type, or Select Menu Command."
  34.  activity$ÿ""
  35.  ÿŽpth$
  36.  ÿ´ÿœ"Mailit"ÿí2
  37.  ÿ¥1,"!GOTO Helpme"
  38.  ÿÊÿŸ"Superbase Mailing List System"
  39.  ÿ¬1,0,1,"&Commands"
  40.  ÿ¬ÿ³clm%,sel%
  41.  ccr%ÿ0:cc%ÿ0:ent%ÿ0:a$ÿ"":ret%ÿ0:helpsel%ÿ0:zr%ÿ0
  42.  sel%ÿ0:a$ÿ"":srtn%ÿ0
  43.  ÿÏÿ¬ÿÿ¥ÿÿß
  44.  
  45. MM1: 
  46.  
  47.  ÿ½ ** This routine actually takes the selection and finds out where the
  48.  ÿ½    user wanted to go.
  49.  
  50.  ÿ¬1,0,0," "
  51.  ÿ³sel%ÿwAddEnts,MergeEnts,EditEnts,PrintLabs,Utilities,PurgeEnts,SetOpts,Helpme,Quitit
  52.  
  53.  ÿ½ ** If we get to here, the user must have pressed a key or clicked on an area that is not a button
  54.  
  55.  ÿa$
  56.  ÿvFlushBuffer
  57.  a$ÿÿ>(a$)
  58.  sel%ÿÿ?("AMELUPOHQ",ÿ>(a$))
  59.  ÿ¡a$ÿÿ(27)ÿpsel%ÿ9
  60.  ÿ¡a$ÿ"?"ÿpsel%ÿ8
  61.  
  62.  ÿ¡sel%ÿwMM1
  63.  ÿ
  64.  ÿwMainMenu
  65.  
  66. AddEnts: 
  67.  
  68.  ÿ½ ** Add set up area
  69.  
  70.  ret%ÿ9:helpsel%ÿ1
  71.  ÿÊÿŸ"Add to Mailing List"
  72.  activity$ÿ"Data Entry Form"
  73.  ÿ´ÿœ"AddForm"
  74.  ÿÊÿË"ESC=Stop  |  SHIFT+TAB=Previous Field"
  75.  
  76. AE1: 
  77.  
  78.  ÿ½ ** Actual guts of the Add routine.  Checks for a blank form for an end-of-entry
  79.  
  80.  ÿÿœ
  81.  Country ÿ"USA"
  82.  ÿÎ
  83.  ÿßÿ³
  84.  ÿ”1,0
  85.  ÿ¡FirstName ÿ""ÿ LastName ÿ""ÿ Company ÿ""ÿpactivity$ÿ"":ÿwMainMenu
  86.  ÿÌÿœ
  87.  ÿwAE1
  88.  
  89. MergeEnts: 
  90.  
  91.  ÿ½ ** Merge front end - The prg% variable is used to distinguish whether we are merging (0), or purging (9)
  92.  
  93.  ÿœ6
  94.  ÿÊÿË"Merge Databases..."
  95.  ret%ÿ9:helpsel%ÿ2
  96.  ÿ¥1,"!GOTO H1"
  97.  merl%ÿ4:automan%ÿ1
  98.  ÿÊÿŸ"Merge Entries"
  99.  bHelp1$ÿ"Help
  100.  bModify$ÿ"Set Thresholds"
  101.  bCancel$ÿ"Cancel Merge"
  102.  bOK$ÿ"Begin Merge
  103.  prg%ÿ0
  104.  ÿwMEBegin
  105.  
  106. PurgeEnts: 
  107.  
  108.  ÿ½ ** Purge front end
  109.  
  110.  ÿœ6
  111.  ÿÊÿË"Purge Databases..."
  112.  ret%ÿ9:helpsel%ÿ6
  113.  ÿ¥1,"!GOTO H1"
  114.  merl%ÿ1:automan%ÿ1
  115.  ÿÊÿŸ"Purge Entries"
  116.  bModify$ÿ"Set Thresholds"
  117.  bHelp$ÿ"Help"
  118.  bCancel$ÿ"Cancel Purge"
  119.  bOK$ÿ"Begin Purge"
  120.  prg%ÿ9
  121.  
  122. MEBegin: 
  123.  ÿÊÿË"ESC=Stop  |  B=Begin  |  T=Set Thresholds"
  124.  cnt%ÿ0
  125.  ÿwME21
  126.  
  127. ME1: 
  128.  
  129.  ÿ½ ** Wait for entry then see if it was a mouse click
  130.  
  131.  ÿÎ
  132.  cnt%ÿ0:a$ÿ""
  133.  ÿÏÿ¥ÿÿß
  134.  ÿa$
  135.  ÿvFlushBuffer
  136.  ÿ¡a$ÿ""ÿwME2
  137.  ÿ¡cnt%ÿ
  138. 0ÿwH1
  139.  ÿ¡cnt%ÿ50ÿwMainMenu
  140.  ÿ¡cnt%ÿ999ÿwMChangePreset
  141.  ÿ¡cnt%ÿ0ÿwME21
  142.  ÿwME3
  143.  
  144. ME2: 
  145.  
  146.  ÿ½ ** Check what key was pressed
  147.  
  148.  z%ÿÿ0(a$)
  149.  ÿ¡z%ÿ0ÿpz%ÿmerl%
  150.  a$ÿÿ>(a$)
  151.  ÿÉÿæa$
  152. ÿæ"H","?"
  153. ÿwH1
  154. ÿæ"C",ÿ(27)
  155. ÿwMainMenu
  156. ÿæ"V"
  157. automan%ÿ2:ÿwME21
  158. ÿæ"M"
  159. automan%ÿ1:ÿwME21
  160. ÿæ"O"
  161. automan%ÿ3:ÿwME21
  162. ÿæ"T"
  163. ÿwMChangePreset
  164. ÿæ"B"
  165. ÿwME3
  166. ÿæÿ^
  167. ÿ¡z%ÿ5ÿwME1
  168. merl%ÿz%
  169.  ÿ’ÿÉ
  170.  
  171. ME21: 
  172.  
  173.  ÿ½ ** Set preset levels from pre-defined array
  174.  
  175.  prs1%ÿprs%(merl%,1)
  176.  prs2%ÿprs%(merl%,2)
  177.  prs3%ÿprs%(merl%,3)
  178.  prs4%ÿprs%(merl%,4)
  179.  prs5%ÿprs%(merl%,5)
  180.  ÿwME1 
  181.  
  182. MChangePreset: 
  183.  
  184.  ÿ½ ** Modify Preset levels and then store them
  185.  
  186.  ÿ”1,5
  187.  prs%(merl%,1)ÿprs1%
  188.  prs%(merl%,2)ÿprs2%
  189.  prs%(merl%,3)ÿprs3%
  190.  prs%(merl%,4)ÿprs4%
  191.  prs%(merl%,5)ÿprs5%
  192.  ÿ´"mdefault"ÿ›ÿ¶
  193.  ÿ{ÿ«
  194.  ÿ†ÿ¶
  195.  ÿwME21
  196.  
  197. ME3: 
  198.  
  199.  ÿ½ ** Set up routine for the Find Duplications routine.  This routine
  200.  ÿ½    sets up the forms, then checks to see if the file is in a proper
  201.  ÿ½    format (if its a merge), and imports it.
  202.  
  203.  ÿ¡prg%ÿ0ÿpst$ÿ"Importing":st1$ÿ"Import"ÿ^st$ÿ"Purging Section of":st1$ÿ"Purge"
  204.  R%ÿÿA("MailBase")
  205.  ÿ¡prg%ÿ0ÿp
  206. ÿÊÿË"Importing file..."
  207. ÿÂ"File to import:","",11,n%,fln$
  208. ÿ¡n%ÿ0ÿwMergeEnts
  209. ÿ¡ÿJ(fln$ÿ".sbf")ÿ0ÿpÿÂ"Cannot find file ",fln$ÿ".sbf",21,n%:ÿwMergeEnts
  210. bModify$ÿ"Importing...":bHelp$ÿ"Importing...":bCancel$ÿ"Importing...":bOK$ÿ"Importing..."
  211. ÿÎ
  212. ÿxFieldNameData
  213. z1%ÿ0
  214. ÿ´fln$ÿ".sbd"ÿ›ÿ¤
  215. I1: 
  216. ÿ¼b$
  217. ÿ¤ÿca$
  218. ÿ¡ÿ-(a$,1)ÿ">"ÿpz1%ÿ9
  219. a$ÿÿF(ÿ+(a$,15))
  220. ÿ¡ÿ>(a$)ÿÿ>(b$)ÿwNoWay
  221. ÿ¡b$ÿ"Misc2"ÿwOKDokey
  222. ÿ¡z1%ÿpz1%ÿ0:ÿ¤ÿca$
  223. ÿwI1
  224. NoWay: 
  225. ÿ†ÿ¤
  226. ÿÂ"This file does not match the MailBase","parameters.  Re-configure and try again.",114,n%
  227. ÿwMainMenu
  228. OKDokey: 
  229. ÿ†ÿ¤
  230. ÿ¢fln$ÿ".sbf"ÿqÿ™"MailBase"
  231.  ÿ’ÿ¡
  232.  
  233.  ÿ½ ** Now we check to see if they want to standardize the mail base.
  234.  ÿ½    If they do, the chances for finding duplicates increases due to
  235.  ÿ½    the fact that there will be less confusion over whether Ave and
  236.  ÿ½    Avenue are the same thing.
  237.  
  238.  ÿ¡prg%ÿ0ÿp
  239. srtn%ÿ9
  240. ÿÂ"Do You Wish to Standardize the Database First?","",130,n%
  241. ÿ¡n%ÿ0ÿpsrtn%ÿ0:ÿwBeg
  242. ÿvBegStand
  243. srtn%ÿ0
  244.  ÿ’ÿ¡
  245.  
  246. Beg: 
  247.  
  248.  ÿ½ ** Now we actually jump out to the FindDupes routine and close out
  249.  ÿ½    after we are done, showing the total number of changed records
  250.  ÿ½    and so on.
  251.  
  252.  md%ÿÿA("MailBase")
  253.  ÿvFindDupes
  254.  ÿ¡(prs1%ÿprs2%ÿprs3%ÿprs4%ÿprs5%ÿ0)ÿ prg%ÿpÿÉÿ¾ÿ™"MailBase"
  255.  fl%ÿÿA("MailBase")
  256.  activity$ÿst1$ÿ" complete"ÿÿ(13)
  257.  activity$ÿactivity$ÿ"Initial Record Count was "ÿÿH(ÿ(R%,5,0))ÿ","ÿÿ(13)
  258.  ÿ¡prg%ÿ0ÿp
  259. activity$ÿactivity$ÿÿH(ÿ(md%ÿR%,5,0))ÿ" Records Imported"ÿÿ(13)
  260.  ÿ’ÿ¡
  261.  activity$ÿactivity$ÿÿH(ÿ(md%ÿfl%,5,0))ÿ" Records Purged"ÿÿ(13)
  262.  activity$ÿactivity$ÿÿH(ÿ(fl%,5,0))ÿ" Records Remaining"ÿÿ(13)
  263.  ÿœ1
  264.  ÿÊÿË"Press any key to continue..."
  265.  ÿÏÿ¥a$
  266.  ÿwMainMenu
  267.  
  268. FindDupes: 
  269.  
  270.  ÿ½ ** this is the heart of the Merge/Purge routines as it actually finds
  271.  ÿ½    any duplications and handles them according to what the user
  272.  ÿ½    user wishes.
  273.  
  274.  ÿ¡prg%ÿ0ÿ (prs1%ÿprs2%ÿprs3%ÿprs4%ÿprs5%ÿ0)ÿpÿÃ
  275.  ÿ¡prg%ÿ (prs1%ÿprs2%ÿprs3%ÿprs4%ÿprs5%ÿ0)ÿp
  276. ÿÂ"WARNING! All thresholds are currently set to zero, this","will delete all records in the file. Proceed?",148,n%
  277. ÿ¡n%ÿ0ÿwPurgeEnts
  278. ÿÂ"Are you sure?","",135,n%
  279. ÿ¡n%ÿ0ÿwPurgeEnts
  280.  ÿ’ÿ¡
  281.  ÿÊÿË"Removing current index..."
  282.  ÿ™"MailBase"
  283.  ÿ³ÿ_ÿwNoIndex
  284.  ÿ£VirField.MailBase
  285.  ÿ¾ÿ£VirField.MailBase
  286.  ÿwGoOn
  287. NoIndex: 
  288.  ÿyGoOn
  289.  ÿ’
  290. GoOn: 
  291.  ÿ³ÿ_ÿwErrtrap
  292.  crit$ÿ"LEFT$(Zip.MailBase,"ÿÿH(ÿ(prs%(merl%,5),2,0))ÿ")+LEFT$(lastname.Mailbase,"ÿÿH(ÿ(prs%(merl%,1),2,0))ÿ")+left$(Address1.MailBase,"ÿÿH(ÿ(prs%(merl%,2),2,0))ÿ")+left$(company.MailBase,"
  293.  crit$ÿcrit$ÿÿH(ÿ(prs%(merl%,3),2,0))ÿ")+left$(City.MailBase,"ÿÿH(ÿ(prs%(merl%,4),2,0))ÿ")"
  294.  ÿÊÿË"Creating Index..."
  295.  ÿ¡srtn%ÿpsrtn%ÿ0:ÿœ5
  296.  bModify$ÿ"Wait..."
  297.  bHelp$ÿ"Wait..."
  298.  bCancel$ÿ"Wait..."
  299.  bOK$ÿ"Wait..."
  300.  ÿÎ
  301.  ÿ®VirField.MailBase,"VirField;VTX CLC RDO;50;14;0",crit$
  302.  ÿ‰ÿ£ÿ³VirField.MailBase
  303.  
  304.  ÿ½ ** at this time, we have our virtual field set up, and are going to
  305.  ÿ½    actually start checking for duplicates via the very handy
  306.  ÿ½    SELECT DUPLICATE command.
  307.  
  308.  ÿ™"MailBase"
  309.  ÿ¡automan%ÿ
  310. 3ÿp
  311. ÿœ5
  312. ÿ^
  313. activity$ÿ"Wait, "ÿst$ÿ" database...":ÿœ1
  314.  ÿ’ÿ¡
  315.  ÿÊÿËst$ÿ" database..."
  316.  bKeep$ÿ"Keep":bDelete$ÿ"Delete":bRplace$ÿ"Replace"
  317.  ÿ¡automan%ÿ1ÿpbKeep$ÿ"Auto Mode":bDelete$ÿ"Auto Mode":bRplace$ÿ"Auto Mode"
  318.  ÿ¡automan%ÿ2ÿpbDelete$ÿ"Searching..."
  319.  ÿÉÿ`
  320.  recproc%ÿ0
  321.  numdups%ÿ0
  322.  
  323. FD1: 
  324.  
  325.  ÿ½ ** this routine is the actual loop that runs through every record in the database
  326.  ÿ½    searching for duplicates.
  327.  
  328.  ÿink$
  329.  ÿ¡ink$ÿÿ(27)ÿink$ÿ"C"ÿpÿÃ
  330.  a10$ÿVirField.MailBase
  331.  recproc%ÿrecproc%ÿ1
  332.  ÿ¡automan%ÿ
  333. 3ÿp
  334. ÿ¡automan%ÿ2ÿpbDelete$ÿ"Searching..."
  335. a1$ÿFirstName.MailBase
  336. a2$ÿLastName.MailBase
  337. a3$ÿCompany.MailBase
  338. a4$ÿAddress1.MailBase
  339. a5$ÿAddress2.MailBase
  340. a6$ÿCity.MailBase
  341. a7$ÿState.MailBase
  342. a8$ÿZip.MailBase
  343. a9$ÿÿ(Entered.MailBase,"mm/dd/yyyy")
  344. a11$ÿ""
  345. ÿÿœ:ÿÎ:ÿÉÿY
  346.  ÿ’ÿ¡
  347. FD2: 
  348.  
  349.  ÿ½ ** The screen is set up, and we have our current index.  Now, is
  350.  ÿ½    there any duplicates?
  351.  
  352.  ÿÉÿ]
  353.  ÿ¡ÿB("MailBase")ÿp
  354. ÿÉÿ±ÿ™"MailBase"
  355. ÿ¡ÿB("MailBase")ÿpÿÃ
  356. ÿwFD1
  357.  ÿ^
  358. ÿ¡automan%ÿ
  359. 2ÿp
  360. numdups%ÿnumdups%ÿ1
  361. ÿ
  362. a11$ÿVirField.MailBase
  363. ÿÎ
  364. bCmd%ÿ0
  365. MF1: 
  366.  
  367. ÿ½ ** We have found a duplicate and the user has selected
  368. ÿ½    the manual mode, so we set up our display and allow
  369. ÿ½    them to select whether to delete, etc.
  370.  
  371. ÿÊÿË"ESC=Stop  |  D=Delete  |  K=Keep  |  R=Replace"
  372. ÿÏÿ¥ÿÿß
  373. ÿ¡bCmd%ÿ0ÿpÿa$:a$ÿÿ>(a$)
  374. ÿ¡bCmd%ÿ3ÿa$ÿ"R"ÿpa11$ÿvirfield.MailBase:ÿÉÿ¥a10$:ÿÉÿ¾ÿ™"MailBase":ÿÉÿ¥a11$:ÿwFD1
  375. ÿ¡bCmd%ÿ2ÿa$ÿ"D"ÿpÿÉÿ¾ÿ™"MailBase":ÿÉÿ¥a10$:ÿwFD1
  376. ÿ¡bCmd%ÿ1ÿa$ÿ"K"ÿp
  377. ÿÉÿ±ÿ™"MailBase"
  378. ÿ¡ÿB("MailBase")ÿpÿÃ
  379. ÿwFD1
  380. ÿ’ÿ¡
  381. ÿ¡a$ÿ"C"ÿa$ÿÿ(27)ÿpÿÃ
  382. ÿwMF1
  383. ÿ^
  384. ÿ¡automan%ÿ2ÿpnumdups%ÿnumdups%ÿ1:bDelete$ÿ"Deleting...":a11$ÿVirField.MailBase:ÿÎ
  385. ÿÉÿ¾ÿ™"MailBase"
  386. ÿÉÿ¥a10$
  387. ÿwFD1
  388. ÿ’ÿ¡
  389.  ÿ’ÿ¡
  390.  ÿwFD1
  391.  
  392. EditEnts:
  393.  
  394.  ÿ½ ** Edit command.  This command allows you to modify, delete, and look
  395.  ÿ½    through all the different records.
  396.  
  397.  ÿÊÿŸ"Edit Mailing List"
  398.  ret%ÿ9:helpsel%ÿ3
  399.  ÿÊÿåÿ¥ÿ³
  400.  ÿ¥1,"!activity$=~~:open form ~Mailit~:GOTO H1"
  401.  ÿ¥2,"!GOTO Editit"
  402.  ÿ¥3,"!GOTO Deleteit"
  403.  ÿ¥10,"!GOTO DropFunctions"
  404.  activity$ÿ"Data Editing Form"
  405.  ÿÉÿ`
  406.  ÿ´ÿœ"AddForm"
  407.  cc%ÿ1
  408.  
  409. EE1:
  410.  
  411.  ÿ½ ** This actually searches for the keyboard input and turns the panel
  412.  ÿ½    on to allow the searching of records.
  413.  
  414.  a$ÿ""
  415.  ÿÊÿË"ESC=Stop  |  E=Edit  |  D=Delete  |  Shift+F1=Help"
  416.  ÿÏÿâÿÿ¥
  417.  ÿa$
  418.  ÿvFlushBuffer
  419.  a$ÿÿ>(a$)
  420.  ÿ¡a$ÿ"?"ÿa$ÿ"H"ÿpÿ´ÿœ"Mailit":ÿwH1
  421.  ÿ¡a$ÿ"E"ÿwEditit
  422.  ÿ¡a$ÿ"D"ÿwDeleteit
  423.  ÿ¡a$ÿÿ(27)ÿa$ÿ"C"ÿa$ÿ"Q"ÿwDropFunctions
  424.  ÿwEE1
  425.  
  426. Editit: 
  427.  
  428.  ÿ½ ** The user wants to edit this record, so we let them
  429.  
  430.  ÿÊÿË"Editing Record..."
  431.  ÿßÿ³
  432.  ÿ”1,0
  433.  ÿÌÿ™"MailBase"
  434.  ÿwEE1
  435.  
  436. Deleteit: 
  437.  
  438.  ÿ½ ** Are you sure you want to delete this record?
  439.  
  440.  ÿÊÿË"Delete Record..."
  441.  ÿÂ"Are you sure you wish to delete this record?","",135,n%
  442.  ÿ¡n%ÿpÿÉÿ¾ÿ™"MailBase"
  443.  ÿÎ
  444.  ÿwEE1 
  445. DropFunctions: 
  446.  
  447.  ÿ½ ** Edit Exit.  Clear the function keys 
  448.  
  449.  ÿ¥2
  450.  ÿ¥3
  451.  ÿ¥10
  452.  cc%ÿ0
  453.  activity$ÿ""
  454.  ÿâÿe
  455.  ÿwMainMenu 
  456.  
  457. PressanyKey: 
  458.  
  459.  ÿ½ ** Subroutine to check for keypress
  460.  
  461.  ÿÊÿË"Press any Key to continue..."
  462.  ÿÏa$
  463.  ÿwMainMenu
  464.  
  465. PrintLabs: 
  466.  
  467.  ÿ½ ** Labels printing routine.
  468.  ÿ½    All labels files have the extension .SBB
  469.  
  470.  ÿÊÿŸ"Print Labels"
  471.  ÿÊÿË"Printing Labels..."
  472.  c$ÿ""
  473.  fln$ÿ"*.SBB"
  474.  ÿÂ"Select the Labels Definition","To print with:",18,n%,fln$
  475.  ÿ¡n%ÿ0ÿwMainMenu
  476.  ÿ¨ÿ¦fln$
  477.  ÿxLabData
  478.  ÿ›x%ÿ0ÿq3
  479. ÿ¼a$(x%),e$(x%)
  480. c%(x%)ÿx%ÿ1
  481.  ÿ±x%
  482. P0: 
  483.  z%ÿ1
  484.  ÿÂ"Please choose what field(s)","To sort on:",20,zz%,z%,50,c%,a$
  485.  ÿ¡zz%ÿ0ÿwMainMenu
  486.  ÿ¡z%ÿ1ÿwPL1
  487.  ÿ¡z%ÿ4ÿz%ÿ
  488. 1ÿpÿÂ"Illegal Selection,","Re-Enter!",113,n%:ÿwP0
  489.  ÿÊÿË"One Moment... Creating Index..."
  490.  activity$ÿ"One Moment,"ÿÿ(13)ÿÿ(13)ÿ"Building Index..."
  491.  ÿœ1
  492.  ÿ³ÿ_ÿwP1
  493.  ÿ¾ÿ£VirField
  494.  ÿwP2
  495. P1: 
  496.  ÿyP2
  497.  ÿ’
  498. P2: 
  499.  ÿ³ÿ_ÿwErrtrap
  500.  ÿ®VirField,"VirField ; vtx clc rdo ; 50 ; 14 ; 0 ",e$(z%ÿ1)
  501.  ÿ‰ÿ£ÿ³VirField
  502.  ÿ£VirField
  503. PL1: 
  504.  ÿ¦ÿÐÿ~
  505.  ÿ†ÿ˜
  506.  ÿwMainMenu
  507.  
  508.  ÿ½ ** Lab Data holds the info for the Requester
  509.  ÿ½    20.  More sorts can be added by changing the
  510.  ÿ½    x% and DIM sizes, and then adding a DATA
  511.  ÿ½    statement to the end of this with the title,
  512.  ÿ½    then the actual equation to sort by.
  513.  
  514. LabData: 
  515.  ÿŠ"Don't Sort.",""
  516.  ÿŠ"Sort by LastName.","LastName"
  517.  ÿŠ"Sort by Zip Code.","Zip"
  518.  ÿŠ"Sort by Zip COde and LastName.","pad$(Zip,10)+LastName"
  519.  
  520. Utilities: 
  521.  
  522.  ÿ½ ** The Utilities main menu.
  523.  
  524.  ÿÊÿŸ"Mailing List Utilities"
  525.  ÿœ9
  526.  ÿÊÿË"Select Utility..."
  527.  ÿ¥1,"!goto H1"
  528.  helpsel%ÿ5:ret%ÿ9
  529.  
  530. U1: 
  531.  
  532.  ÿ½ ** detect key entry, etc.
  533.  
  534.  a$ÿ"":utilsel%ÿ0
  535.  ÿÏÿ¥ÿÿß
  536.  ÿa$:a$ÿÿ>(a$)
  537.  ÿvFlushBuffer
  538.  ÿÉÿæa$
  539. ÿæ"S"
  540. ÿwConvertit
  541. ÿæ"E"
  542. ÿwExportit
  543. ÿæ"B"
  544. ÿwBackitup
  545. ÿæ"H","?"
  546. ÿwH1
  547. ÿæ"R"
  548. ÿwRestorebase
  549. ÿæ"Q",ÿ(27)
  550. ÿwMainMenu
  551. ÿæÿ^
  552. ÿ³utilsel%ÿwConvertit,Exportit,Backitup,Restorebase,MainMenu,H1
  553.  ÿ’ÿÉ
  554.  ÿwU1
  555.  
  556. Exportit: 
  557.  
  558.  ÿ½ ** Allow the user to send out the database as ASCII delimited text
  559.  
  560.  ÿÊÿŸ"Exporting Mail Base"
  561.  activity$ÿ""
  562.  ÿœ1
  563.  ÿÊÿË"Exporting..."
  564.  ÿÂ"Name of Export File?","",4,n%,fln$,50
  565.  ÿ¡n%ÿ0ÿwUtilities
  566.  activity$ÿ"Exporting Mail Base to File '"ÿfln$ÿ"'..."
  567.  ÿÎ
  568.  ÿ™"MailBase"
  569.  ÿ—ÿqfln$ÿÐÿ~ÿsÿ(ÿ0(f1$))ÿÿ(ÿ0(f2$)),ÿ(ÿ0(r1$))ÿÿ(ÿ0(r2$)),"0"
  570.  ÿwUtilities
  571.  
  572. Backitup: 
  573.  
  574.  ÿ½ ** Save that database from the big bad DOS monster
  575.  
  576.  ÿÊÿŸ"Back Up Mail Base"
  577.  activity$ÿ""
  578.  ÿœ1
  579.  ÿÊÿË"Select File Name..."
  580.  ÿÂ"Backup Database","to Which File?",11,n%,fln$
  581.  ÿ¡n%ÿ0ÿwUtilities
  582.  ÿ¡ÿJ(fln$)ÿpÿ´ÿ™ÿ+(fln$,ÿ/(fln$)ÿ4):ÿ¾ÿ™ÿ+(fln$,ÿ/(fln$)ÿ4)
  583.  activity$ÿ"Backing up Mail Base to the new Superbase file '"ÿfln$ÿ"'..."
  584.  ÿÊÿË"Backing up your mail base..."
  585.  ÿÎ
  586.  ÿ™"MailBase"
  587.  ÿÉÿtÿqÿ™fln$
  588.  ÿwUtilities
  589.  
  590. Restorebase: 
  591.  
  592.  ÿ½ ** Restore the database back to the MailBase file.
  593.  
  594.  ÿÊÿŸ"Restore Mail Base"
  595.  ÿÊÿË"File to Back up from..."
  596.  activity$ÿ""
  597.  ÿœ1
  598.  ÿÂ"Restore from","Which File?",11,n%,fln$
  599.  ÿ¡n%ÿ0ÿwUtilities
  600.  ÿ¡ÿJ(fln$ÿ".sbf")ÿ0ÿpÿÂ"Cannot find database "ÿfln$,"",113,n%:ÿwUtilities 
  601.  ÿÂ"Proceeding with this action will overwrite","all data in the present database. Continue?",148,n%
  602.  ÿ¡n%ÿ0ÿwUtilities
  603.  ÿxFieldNameData
  604.  z1%ÿ0
  605.  
  606.  ÿ½ ** We are making sure that the user is trying to restore a file that is the same definition as the main MAILBASE file.
  607.  
  608.  ÿ´fln$ÿ".sbd"ÿ›ÿ¤
  609. Rb1: 
  610.  ÿ¼b$
  611.  ÿ¤ÿca$
  612.  ÿ¡ÿ-(a$,1)ÿ">"ÿpz1%ÿ9
  613.  a$ÿÿF(ÿ+(a$,15))
  614.  ÿ¡ÿ>(a$)ÿÿ>(b$)ÿwGetoutofHere
  615.  ÿ¡z1%ÿpz1%ÿ0:ÿ¤ÿca$
  616.  ÿ¡b$ÿ"Misc2"ÿwYeppers
  617.  ÿwRb1
  618. GetoutofHere: 
  619.  ÿ†ÿ¤
  620.  ÿÂ"This file is not in the Mail Base","format.  Re-configure and try again.",113,n%
  621.  ÿwUtilities
  622. Yeppers: 
  623.  
  624.  ÿ½ ** The file is in the same format, so we over-write the MailBase file with the new file
  625.  
  626.  ÿ†ÿ¤
  627.  activity$ÿ"Restoring database..."
  628.  ÿÊÿË"Restoring database..."
  629.  ÿœ1
  630.  cc%ÿ1
  631.  ÿ¾ÿaÿ™"MailBase"
  632.  ÿ¢fln$ÿ".sbf"ÿqÿ™"MailBase"
  633.  cc%ÿ0
  634.  ÿwUtilities
  635.  
  636. BegStand: 
  637.  activity$ÿ""
  638.  ÿœ1
  639.  ÿ´ÿ™"RuleBase"
  640.  ÿwCI1
  641.  
  642. Convertit: 
  643.  
  644.  ÿ½ ** this is the infamous standardize routine
  645.  
  646.  activity$ÿ""
  647.  ÿœ9
  648.  ÿÊÿË"Are you sure?"
  649.  ÿÊÿŸ"Standardize Mail Database"
  650.  ÿŽpth$
  651.  ÿ´ÿ™"RuleBase"
  652.  ÿÂ"This process can take a considerable time for "ÿÿH(ÿ(ÿA("MailBase"),5,0))ÿ" records,","do you wish to continue?",148,n%
  653.  ÿ¡n%ÿ0ÿwUtilities
  654. CI1: 
  655.  ÿÊÿË"Standardizing Mail Base..."
  656.  activity$ÿ"Processing Rule Base..."
  657.  ÿœ1
  658.  ctx%ÿ1
  659.  ÿÍRuleNum.RuleBaseÿctx%:ctx%ÿctx%ÿ1
  660.  
  661.  ctx%ÿ1
  662.  ÿÍRecNum.MailBaseÿctx%:ctx%ÿctx%ÿ1
  663.  
  664.  ÿ£RuleNum.RuleBase
  665.  ÿœ10
  666.  rctotal%ÿÿA("MailBase")
  667.  rcleft%ÿÿA("MailBase")
  668.  rcnum%ÿ0
  669.  totrul%ÿÿA("RuleBase")
  670.  onrul%ÿ0
  671.  ÿvUpdateScreen
  672.  ÿ™"MailBase"
  673.  ÿ£recnum.mailbase
  674.  ÿÉÿ`ÿ™"MailBase"
  675.  ÿÉÿ`ÿ™"RuleBase"
  676. C1: 
  677.  ÿ½ ** we build the zz$ which is the string of what we are actually looking for
  678.  ÿ½    the nsp% means that we either don't care if there is a space at the end (0), or that we DO care (1)
  679.  ÿ½    the wh% is set for look for zz$ anywhere (1), just at the end (2), or only at the beginning (3)
  680.  ÿ½    the @ is replaced with spaces
  681.  ÿk$
  682.  ÿ¡k$ÿÿ(27)ÿpÿÉÿÐ:ÿÉÿ`:ÿwEndStand
  683.  ÿ¡ÿB("RuleBase")ÿwCend
  684.  onrul%ÿonrul%ÿ1
  685.  rcnum%ÿ0
  686.  rcleft%ÿÿA("MailBase")
  687.  ÿvUpdateScreen
  688.  nsp%ÿ0:wh%ÿ1
  689.  z$ÿLookFor
  690.  ÿ¡ÿ+(z$,1)ÿ"*"ÿpz$ÿÿ,(z$,2):wh%ÿ2
  691.  ÿ¡ÿ+(z$,1)ÿ"^"ÿpz$ÿÿ,(z$,2):wh%ÿ3
  692.  zz$ÿ""
  693.  ÿ›x%ÿ1ÿqÿ/(z$)
  694. ÿ¡ÿ,(z$,x%,1)ÿ"!"ÿp
  695. zz$ÿzz$ÿ""
  696. ÿ^ÿ¡ÿ,(z$,x%,1)ÿ"@"ÿp
  697. zz$ÿzz$ÿ" "
  698. ÿ^
  699. zz$ÿzz$ÿÿ,(z$,x%,1)
  700. ÿ’ÿ¡
  701.  ÿ±x%
  702.  ÿ¡ÿ?(z$,"!")ÿpnsp%ÿ1
  703.  ex$ÿ"select where "ÿFieldName.RuleBaseÿ" like "ÿÿ(34)ÿ"*"ÿÿH(ÿF(zz$))ÿ"*"ÿÿ(34)
  704.  ÿ–ex$
  705.  ex$ÿ""
  706.  ÿÉÿ`ÿ™"Mailbase"
  707. C20: 
  708.  
  709.  ÿ½ ** now we make the a$ equal the contents of the field we are searching, and add a space at the end (for searching purposes)
  710.  
  711.  ex$ÿ"a$="ÿFieldName.RuleBase
  712.  ÿ–ex$
  713.  ex$ÿ""
  714.  a$ÿa$ÿ" "
  715.  ÿ¡ÿB("MailBase")ÿpÿÉÿ±ÿ™"RuleBase":ÿwC1
  716.  rcnum%ÿRecnum.mailBase
  717.  rcleft%ÿrctotal%ÿrcnum%
  718.  ÿvUpdateScreen
  719.  
  720. CRemake: 
  721.  
  722.  ÿ½ ** is zz$ in a$?  If yes, then we possibly have a match
  723.  
  724.  zz%ÿÿ?(ÿ>(a$),ÿ>(zz$))
  725.  ÿ¡zz%ÿ0ÿpÿÉÿ±ÿ™"MailBase":ÿwC20
  726.  ÿ¡nsp%ÿ1ÿ ÿ,(a$,zz%ÿÿ/(zz$),1)ÿ" "ÿpÿÉÿ±ÿ™"MailBase":ÿwC20
  727.  ÿ¡zz%ÿ1ÿ wh%ÿ3ÿpÿÉÿ±ÿ™"MailBase":ÿwC20
  728.  ÿ¡wh%ÿ2ÿp
  729. ÿ¡zz%ÿÿ/(zz$)ÿ4ÿ
  730. ÿ/(a$)ÿp
  731. ÿÉÿ±ÿ™"MailBase":ÿwC20
  732. ÿ’ÿ¡
  733.  ÿ’ÿ¡
  734.  ÿ¡zz%ÿ
  735. 2ÿpff$ÿ""ÿ^ff$ÿÿ+(a$,zz%ÿ1)
  736.  af$ÿÿ,(a$,zz%ÿÿ/(zz$))
  737.  Ct$ÿChangeTo
  738.  pw%ÿ1
  739.  ÿ¡ÿ+(Ct$,1)ÿ"*"ÿppw%ÿ2:Ct$ÿÿ,(Ct$,2)
  740.  ÿ¡ÿ+(Ct$,1)ÿ"^"ÿppw%ÿ3:Ct$ÿÿ,(Ct$,2)
  741.  ch$ÿ""
  742.  ÿ›x%ÿ1ÿqÿ/(Ct$)
  743. ÿ¡ÿ,(Ct$,x%,1)ÿ"@"ÿpch$ÿch$ÿ" "ÿ^ch$ÿch$ÿÿ,(Ct$,x%,1)
  744.  ÿ±x%
  745.  ÿ¡ÿ>(ÿ,(a$,zz%,ÿ/(ch$)))ÿÿ>(ch$)ÿpÿÉÿ±ÿ™"MailBase":ÿwC20
  746.  ÿ¡ÿ?(Ct$,"~")ÿpch$ÿ" "
  747.  ÿ¡pw%ÿ1ÿpa$ÿff$ÿch$ÿaf$
  748.  ÿ¡pw%ÿ2ÿpa$ÿff$ÿaf$ÿch$
  749.  ÿ¡pw%ÿ3ÿpa$ÿch$ÿff$ÿaf$
  750.  ex$ÿFieldName.RuleBaseÿ"=a$"
  751.  a$ÿÿH(ÿF(a$))
  752.  ÿ–ex$
  753.  ex$ÿ""
  754.  ÿ™"MailBase"
  755.  ÿÌ,1
  756.  ÿÉÿ±ÿ™"MailBase"
  757.  ÿwC20
  758.  
  759. Cend: 
  760.  
  761.  ÿ½ ** all done, let's mosy on out of here
  762.  
  763.  ÿ™"MailBase"
  764.  ÿÌ,2
  765.  ÿ†ÿt
  766.  activity$ÿ"Standardization Complete."ÿÿ(13)
  767.  ÿ¡srtn%ÿpactivity$ÿactivity$ÿ"Now Processing Merge File..."ÿÿ(13)
  768.  ÿ´ÿœ"Mailit"
  769.  ÿÏÿ›2
  770. EndStand: 
  771.  ÿ¡srtn%ÿpÿÃ
  772.  ÿwUtilities
  773.  
  774. UpdateScreen: 
  775.  
  776.  ÿ½ ** this updates the screen so the user can see why we are taking fourteen hours away from their favorite mailbase file
  777.  
  778.  onrul$ÿÿH(ÿ(onrul%,5,0))ÿ" of "ÿÿH(ÿ(totrul%,5,0))ÿ"."
  779.  rcleft$ÿÿH(ÿ(rcleft%,6,0))
  780.  rcnum$ÿÿH(ÿ(rcnum%,6,0))
  781.  ÿ¡rcnum%ÿ0ÿprcnum$ÿ"Searching..."
  782.  ÿÎ
  783.  ÿÃ
  784.  
  785. SetOpts: 
  786.  
  787.  ÿ½ ** These commands are mostly front end,  All they are doing is asking
  788.  ÿ½    the user for a series of values.
  789.  
  790.  ÿÊÿŸ"Set Mail Options"
  791.  bCancel$ÿ"Cancel"
  792.  ÿœ7
  793.  ÿÊÿË"ESC=Stop  |  M=Modify Rules  |  C=Change Separators"
  794.  ÿ¬1,0,0," "
  795. SO1: 
  796.  optsel%ÿ0:a$ÿ""
  797.  ÿÏÿ¥ÿÿß
  798.  ÿ¡optsel%ÿ0ÿpÿa$:a$ÿÿ>(a$):ÿvFlushBuffer
  799.  ÿ¡a$ÿ"M"ÿoptsel%ÿ1ÿwOptsRule
  800.  ÿ¡a$ÿ"C"ÿoptsel%ÿ2ÿwOptsSep
  801.  ÿ¡a$ÿÿ(27)ÿa$ÿ"Q"ÿoptsel%ÿ4ÿwMainMenu
  802.  ÿ¡a$ÿ"H"ÿoptsel%ÿ5ÿphelpsel%ÿ7:ret%ÿ9:ÿwH1
  803.  ÿwSO1
  804.  
  805. OptsRule: 
  806.  
  807.  ÿ½ OK, here we change and/or add all them rules for the rule base
  808.  ÿ½ the rules are.  WHEN SEARCHING:
  809.  ÿ½ * - Look for this string at the end of the field
  810.  ÿ½ ^ - Look for this string at the beginning of the field
  811.  ÿ½ @ - this is the same as a space
  812.  ÿ½ ! - do not allow the search field to end in a space
  813.  
  814.  ÿ½ WHEN REPLACING:
  815.  ÿ½ * - Put the resultant string at the end of the field
  816.  ÿ½ ^ - Put the resultant string at the start of the field
  817.  ÿ½ @ - Just a space
  818.  ÿ½ ~ - Delete this entirely (put nothing in its place)
  819.  
  820.  ÿÊÿŸ"Modify Rule Base"
  821.  ÿÊÿË"Select field to modify..."
  822.  ÿ™"MailBase"
  823.  ÿÂ"Select Field","",9,n%,flnm$
  824.  ÿ´ÿ™"RuleBase"
  825.  ÿ¡n%ÿ0ÿwSetOpts
  826.  ctx%ÿ1
  827.  flnm$ÿÿF(ÿ+(flnm$,15))
  828.  ÿÍRuleNum.RuleBaseÿctx%:ctx%ÿctx%ÿ1ÿÐFieldName.RuleBaseÿflnm$
  829.  
  830.  ÿ™"RuleBase"
  831.  ex$ÿ"select where FieldName.RuleBase LIKE "ÿÿ(34)ÿflnm$ÿÿ(34)
  832.  ÿ–ex$
  833.  ex$ÿ""
  834.  mdf$ÿ"Modifying the "ÿflnm$ÿ" field"
  835.  ÿ´ÿœ"optsel2"
  836.  cc%ÿ1
  837.  ÿÉÿ`
  838. Op: 
  839.  
  840.  ÿ½ ** this area allows entry into the rule base (and editing, deleting, etc.)
  841.  
  842.  ÿÊÿË"ESC=Stop | N=New | D=Delete | E=Edit | M=Modify Other"
  843.  a$ÿ""
  844.  ÿÏÿâÿÿ¥
  845.  ÿÊÿË"ESC=Stop | N=New | D=Delete | E=Edit | M=Modify Other"
  846.  ÿa$
  847.  ÿvFlushBuffer
  848.  a$ÿÿ>(a$)
  849.  ÿ¡a$ÿ"N"ÿwOp1
  850.  ÿ¡a$ÿ"M"ÿpÿ†ÿœ:ÿwOptsRule
  851.  ÿ¡a$ÿ"D"ÿwOp2
  852.  ÿ¡a$ÿ"E"ÿwOp3
  853.  ÿ¡a$ÿÿ(27)ÿa$ÿ"C"ÿpcc%ÿ0:ÿâÿe:ÿÉÿÐ:ÿwMainMenu
  854.  ÿwOp
  855.  
  856. Op1: 
  857.  
  858.  ÿ½ ** Add new rule
  859.  
  860.  n$ÿ"":ct$ÿ""
  861.  ÿÂ"Enter Value to Look for in Field "ÿflnm$ÿ"?","",4,n%,n$,15
  862.  ÿ¡n%ÿ0ÿwOp
  863.  ÿÿ™"RuleBase"
  864.  FieldName.RuleBaseÿflnm$
  865.  LookFor.RuleBaseÿn$
  866.  ÿÂ"Change "ÿn$ÿ" to what?","",4,n%,ct$,40
  867.  ÿ¡n%ÿ0ÿwOp
  868.  ChangeTo.RuleBaseÿct$
  869.  RuleNum.RuleBaseÿctx%
  870.  ctx%ÿctx%ÿ1
  871.  ÿÌÿ™"RuleBase"
  872.  ÿwOp
  873.  
  874. Op2: 
  875.  
  876.  ÿ½ ** Delete a rule
  877.  
  878.  ÿÂ"Delete the Change "ÿLookFor ÿ" to",ChangeTo ÿ" record?",135,n%
  879.  ÿ¡n%ÿ0ÿwOp
  880.  ÿÉÿ¾ÿ™"RuleBase"
  881.  ÿœ1
  882.  ÿwOp
  883.  
  884. Op3: 
  885.  
  886.  ÿ½ ** Edit a rule
  887.  
  888.  ÿÂ"Change the "ÿLookFor ÿ" to "ÿChangeTo,"Record?",135,n%
  889.  ÿ¡n%ÿ0ÿwOp
  890.  n$ÿLookFor.RuleBase
  891.  ÿÂ"Alter Look For to ","",4,n%,n$,15
  892.  ÿ¡n%ÿ0ÿwOp
  893.  LookForÿn$
  894.  n$ÿChangeTo
  895.  ÿÂ"Alter Change To Field to ","",4,n%,n$,40
  896.  ÿ¡n%ÿ0ÿwOp
  897.  ChangeToÿn$
  898.  ÿÌÿ™"RuleBase"
  899.  ÿÎ
  900.  ÿwOp
  901.  
  902. OptsSep: 
  903.  
  904.  ÿ½ ** Change the field and record separators
  905.  
  906.  bCancel$ÿ"Cancel"
  907.  fo1$ÿf1$:fo2$ÿf2$:ro1$ÿr1$:ro2$ÿr2$
  908.  ÿÊÿŸ"Change Export Separators"
  909.  ÿœ8
  910.  ÿÊÿË"ESC=Stop  |  F=Fields  |  R=Records"
  911.  
  912. OS1: 
  913.  
  914.  ÿ½ ** menu handler
  915.  
  916.  optsel%ÿ0:a$ÿ""
  917.  ÿÏÿ¥ÿÿß
  918.  ÿ¡optsel%ÿ0ÿpÿa$:a$ÿÿ>(a$):ÿvFlushBuffer
  919.  ÿ¡a$ÿÿ(27)ÿa$ÿ"C"ÿoptsel%ÿ99ÿpf1$ÿfo1$:f2$ÿfo2$:r1$ÿro1$:r2$ÿro2$:ÿwMainMenu
  920.  ÿ¡a$ÿ"U"ÿoptsel%ÿÿ999ÿwMainMenu
  921.  ÿ¡a$ÿ"F"ÿpÿ”6,2:ÿwCheckup
  922.  ÿ¡a$ÿ"R"ÿpÿ”8,2:ÿwCheckup
  923.  ÿwOS1
  924.  
  925. Checkup: 
  926.  
  927.  ÿ½ ** here we are checking to make sure the user typed in values that are valid ASCII field delimters
  928.  ÿ½    if he didn't, we change them back to what they were before.
  929.  
  930.  ÿ¡ÿ0(f1$)ÿ0ÿ ÿ.(f1$)ÿ48ÿpf1$ÿfo1$
  931.  ÿ¡ÿ0(f2$)ÿ0ÿ ÿ.(f2$)ÿ48ÿpf2$ÿfo2$
  932.  ÿ¡ÿ0(r1$)ÿ0ÿ ÿ.(r1$)ÿ48ÿpr1$ÿro1$
  933.  ÿ¡ÿ0(r2$)ÿ0ÿ ÿ.(r2$)ÿ48ÿpr2$ÿro2$
  934.  ÿ¡ÿ0(f1$)ÿ
  935. 0ÿÿ0(f1$)ÿ255ÿpf1$ÿfo1$
  936.  ÿ¡ÿ0(f2$)ÿ
  937. 0ÿÿ0(f2$)ÿ255ÿpf2$ÿfo2$
  938.  ÿ¡ÿ0(r1$)ÿ
  939. 0ÿÿ0(r1$)ÿ255ÿpr1$ÿro1$
  940.  ÿ¡ÿ0(r2$)ÿ
  941. 0ÿÿ0(r2$)ÿ255ÿpr2$ÿro2$
  942.  ÿÎ
  943.  ÿwOS1
  944.  
  945. Helpme: 
  946.  
  947.  ÿ½ ** Main entrance to the Help area
  948.  
  949.  ÿÊÿŸ"MailBase Help"
  950.  ret%ÿ0:helpsel%ÿ0
  951.  
  952. HON: 
  953.  
  954.  ÿ½ ** All the help calls from utilities come in here
  955.  
  956.  ÿœ3
  957.  ÿÊÿË"Select Help Topic"
  958.  ÿ¬ÿe
  959.  ÿ¡ret%ÿwH1
  960.  
  961. HNK: 
  962.  
  963.  ÿ½ ** help main menu
  964.  
  965.  ÿÏÿ¥ÿÿß
  966.  ÿa$:hl%ÿÿ?("AMELUPOQS",ÿ>(a$))
  967.  ÿvFlushBuffer
  968.  ÿ¡a$ÿÿ(27)ÿhl%ÿ8ÿhelpsel%ÿ8ÿwEndHelp
  969.  ÿ¡helpsel%ÿhl%ÿ0ÿwHNK
  970.  ÿ¡helpsel%ÿ0ÿphelpsel%ÿhl%
  971.  
  972. H1: 
  973.  
  974.  ÿ½ ** actual help area.  displays proper screen
  975.  
  976.  ÿ´ÿ™"HelpBase"
  977.  hl$ÿ"<Esc> - Quit back to Main | Any other key for more Help."
  978.  ÿ¡ret%ÿphl$ÿ"<Esc> - Quit back to Start | Any other key for more Help."
  979.  ÿÊÿËhl$
  980.  ÿÉÿÐTopic ÿhelpsel%
  981.  ÿÉÿ`
  982.  ÿœ4
  983.  ÿ¡zr%ÿ0ÿ ret%ÿpzr%ÿhelpsel%
  984.  ÿÏÿ¥ÿÿß
  985.  ÿa$
  986.  ÿvFlushBuffer
  987.  ÿ¡a$ÿÿ(27)ÿÿ>(a$)ÿ"Q"ÿwEndHelp
  988.  ÿwHelpme
  989.  
  990. EndHelp: 
  991.  
  992.  ÿ½ ** return to the proper area
  993.  
  994.  ÿ³zr%ÿwAddEnts,MergeEnts,EditEnts,PrintLabs,Utilities,PurgeEnts,SetOpts
  995.  ÿwMainMenu
  996.  
  997. Quitit: 
  998.  
  999.  ÿ½ ** quit routine
  1000.  
  1001.  ÿÂ"Confirm Exit...","",148,n%
  1002.  ÿ¡n%ÿ0ÿwMainMenu
  1003.  ÿ´"MDefault"ÿ›ÿ¶
  1004.  ÿ{ÿ«
  1005.  ÿ†ÿ¶
  1006.  ÿ†ÿt
  1007.  ÿÊÿŸ""
  1008.  ÿâÿ³
  1009.  ÿ¬ÿ…
  1010.  ÿ’
  1011.  
  1012. FieldNameData: 
  1013.  
  1014.  ÿ½ this is the data used to make sure the database is in the same format as the mailbase file
  1015.  
  1016.  ÿŠ"RecNum","VirField","Title","FirstName","LastName","Company","Address1","Address2","City","State","Zip","Country","HomePhone","WorkPhone","FAX","Notes","Entered","Misc1","Misc2"
  1017.  
  1018. FlushBuffer: 
  1019.  
  1020.  ÿ½ get rid of all those extra typed characters
  1021.  
  1022.  ÿzz1$
  1023.  ÿ¡zz1$ÿ""ÿpÿÃ
  1024.  ÿwFlushBuffer
  1025.  
  1026. Errtrap: 
  1027.  ÿ½ an error has occurred.  The actual error is in ERRNO, and the name of the error can be acquired with the ERR$() command
  1028.  ÿ½ an error number 11 is a control-c or a Stop button
  1029.  ÿ½ a RESUME is necessary to clear the Error condition and to resume with the normal program execution
  1030.  ÿ½ ** cc%=0 --- error occured with program.  Non-expected
  1031.  ÿ½ ** cc%=1 --- Expected error, return back to next statement (stay in same routine)  - I use this for the end-of-file error that occurs when you use WAIT PANEL
  1032.  
  1033.  ÿ¡ÿ&ÿ10ÿ cc%ÿ1ÿpÿÊÿË"*** End of File ***":ÿ:ÿÏÿ›.5:ÿyÿ±
  1034.  ÿ¡cc%ÿ1ÿ ÿ&ÿ11ÿpcc%ÿ0:ÿŽpth$:ÿyMainMenu
  1035.  ÿ¡ÿ&ÿ11ÿpÿŽpth$:ÿyMainMenu
  1036.  ÿ¡cc%ÿ1ÿpÿyÿ±
  1037.  ÿÊÿË"****"ÿÿ((ÿ&)ÿ"****"
  1038.  ÿÏÿ›2.0 
  1039.  ÿŽpth$
  1040.  ÿyMainMenu
  1041.  
  1042.